#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+2;
int n;
struct node{
    long long a,b;
    bool operator < (const node &A)const{
        return b<A.b;
    }
}p[maxn];
struct node_va{
    long long va;
    bool operator < (const node_va &A)const{
        return va<A.va;
    }
};
multiset<node_va>::iterator nw,it1,it2;
multiset<node_va>vle,vgr;
long long ans;
int main(){
    freopen("boast.in","r",stdin);
    freopen("boast.out","w",stdout);
    ans=1e18;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%lld%lld",&p[i].a,&p[i].b);
        vgr.insert((node_va){p[i].a+p[i].b});
    }
    sort(p+1,p+n+1);
    node now;
    long long sum;
    for(int i=1;i<=n;i++){
        now=p[i];
        it1=vgr.find((node_va){now.a+now.b});
        vgr.erase(it1);
        if(i+2<=n){
            it1=vgr.begin();
            sum=it1->va;
            it1++;
            sum+=it1->va;
            ans=min(ans,sum+now.a);
        }
        if(i+1<=n&&i>1){
            it1=vgr.begin();
            sum=it1->va;
            it1=vle.begin();
            sum+=it1->va;
            ans=min(ans,sum+now.a+now.b);
        }
        if(i>2){
            it1=vle.begin();
            sum=it1->va;
            it1++;
            sum+=it1->va;
            ans=min(ans,sum+now.a+now.b+now.b);
        }
        vle.insert((node_va){now.a});
    }
    printf("%lld\n",ans);
    return 0;
}